const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost:27017/mongo-relation')
const Category = mongoose.model('Category',new mongoose.Schema({
    name:{type:String}
}))
//博客
const postSchema = new mongoose.Schema({
    title:{type:String},
    body:{type:String},
    //ref->关联的模型
    //意思是分类category是id类型，而且它关联的是Category模型（集合）里的id
    //这种关联字段只要定义好了type和ref,就能把它查出来
    category:{type:mongoose.SchemaTypes.ObjectId,ref:'Category'}
})
const Post = mongoose.model('Post',postSchema)
async function main(){
    /*
    如果某天想把小写的nodejs换成大写的nodejs,要一个一个去改，数据同步不好维护
    使用关联，一旦在分类集合中把数据改掉，所有的地方都改了，因为他们指向的是一个地方,而不是像下面这样写死
    就像我们的身份证和行驶证证关联，并不是在身份证中记录我有哪些车，而是在行驶证上记录这个车属于哪个人，所以不是在category分类上记录有哪些文章，而是在文章上标记它是什么分类
    如果搞反了，可能一个分类里面有几十万篇文章
    博客里的category不是字符串，而是分类集合中的id，每一个文档中都有一个id
    */
    // await Post.insertMany([
    //     {title:'我的第1篇帖子',category:'nodejs',body:'内容1'},
    //     {title:'我的第2篇帖子',category:'nodejs',body:'内容2'},
    // ])
    // await Category.insertMany([
    //     {name:'nodejs'},
    //     {name:'vuejs'},
    // ])
    console.log(await Category.find())
    //有了分类集合，下一步要把帖子的分类关联到Category集合里的id
    const cat1 = await Category.findOne({name:'nodejs'})
    const post1 = await Post.findOne({title:'我的第1篇帖子'})
    const post2 = await Post.findOne({title:'我的第2篇帖子'})
    //post1.category = cat1._id
    //mongoose比较只能，不传_id,它也会找_id
    post1.category = cat1
    post2.category = cat1
    //保存到数据库
    await post1.save()
    await post2.save()
    // const posts = await Post.find()
    // console.log(posts)
    //已经关联上了id，怎么把对应的分类信息查出来呢？
    //在前面查找数据后面加.populate,表示要把关联数据带出来，参数是博客文档中的关联属性名称
    const posts = await Post.find().populate('category')
    console.log(posts)
    //假如一篇文章有多个分类呢？
}
main()